<?php  if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/**
 * CodeIgniter
 *
 * An open source application development framework for PHP 4.3.2 or newer
 *
 * @package		CodeIgniter
 * @author		ExpressionEngine Dev Team
 * @copyright	Copyright (c) 2008 - 2009, EllisLab, Inc.
 * @license		http://codeigniter.com/user_guide/license.html
 * @link		http://codeigniter.com
 * @since		Version 1.0
 * @filesource
 */

// ------------------------------------------------------------------------

/**
 * CodeIgniter Config Class
 *
 * This class contains functions that enable config files to be managed
 *
 * @package		CodeIgniter
 * @subpackage	Libraries
 * @category	Libraries
 * @author		ExpressionEngine Dev Team
 * @link		http://codeigniter.com/user_guide/libraries/config.html
 */
class CI_Config {

  var $config = array();
  var $is_loaded = array();

  /**
   * Constructor
   *
   * Sets the $config data from the primary config.php file as a class variable
   *
   * @access   public
   * @param   string	the config file name
   * @param   boolean  if configuration values should be loaded into their own section
   * @param   boolean  true if errors should just return false, false if an error message should be displayed
   * @return  boolean  if the file was successfully loaded or not
   */
  function CI_Config() {
    $this->config =& get_config();
    log_message('debug', "Config Class Initialized");
  }

  // --------------------------------------------------------------------

  /**
   * Load Config File
   *
   * @access	public
   * @param	string	the config file name
   * @return	boolean	if the file was loaded correctly
   */
  function load($file = '', $use_sections = FALSE, $fail_gracefully = FALSE) {
    $file = ($file == '') ? 'config' : str_replace(EXT, '', $file);

    if (in_array($file, $this->is_loaded, TRUE)) {
      return TRUE;
    }

    if ( ! file_exists(APPPATH.'config/'.$file.EXT)) {
      if ($fail_gracefully === TRUE) {
        return FALSE;
      }
      show_error('The configuration file '.$file.EXT.' does not exist.');
    }

    include(APPPATH.'config/'.$file.EXT);

    if ( ! isset($config) OR ! is_array($config)) {
      if ($fail_gracefully === TRUE) {
        return FALSE;
      }
      show_error('Your '.$file.EXT.' file does not appear to contain a valid configuration array.');
    }

    if ($use_sections === TRUE) {
      if (isset($this->config[$file])) {
        $this->config[$file] = array_merge($this->config[$file], $config);
      }
      else {
        $this->config[$file] = $config;
      }
    }
    else {
      $this->config = array_merge($this->config, $config);
    }

    $this->is_loaded[] = $file;
    unset($config);

    log_message('debug', 'Config file loaded: config/'.$file.EXT);
    return TRUE;
  }

  // --------------------------------------------------------------------

  /**
   * Fetch a config file item
   *
   *
   * @access	public
   * @param	string	the config item name
   * @param	string	the index name
   * @param	bool
   * @return	string
   */
  function item($item, $index = '') {
    if ($index == '') {
      if ( ! isset($this->config[$item])) {
        return FALSE;
      }

      $pref = $this->config[$item];
    }
    else {
      if ( ! isset($this->config[$index])) {
        return FALSE;
      }

      if ( ! isset($this->config[$index][$item])) {
        return FALSE;
      }

      $pref = $this->config[$index][$item];
    }

    return $pref;
  }

  // --------------------------------------------------------------------

  /**
   * Fetch a config file item - adds slash after item
   *
   * The second parameter allows a slash to be added to the end of
   * the item, in the case of a path.
   *
   * @access	public
   * @param	string	the config item name
   * @param	bool
   * @return	string
   */
  function slash_item($item) {
    if ( ! isset($this->config[$item])) {
      return FALSE;
    }

    $pref = $this->config[$item];

    if ($pref != '' && substr($pref, -1) != '/') {
      $pref .= '/';
    }

    return $pref;
  }

  // --------------------------------------------------------------------

  /**
   * Site URL
   *
   * @access	public
   * @param	string	the URI string
   * @return	string
   */
  function site_url($uri = '') {
    if (is_array($uri)) {
      $uri = implode('/', $uri);
    }

    if ($uri == '') {
      return $this->slash_item('base_url').$this->item('index_page');
    }
    else {
      $suffix = ($this->item('url_suffix') == FALSE) ? '' : $this->item('url_suffix');
      return $this->slash_item('base_url').$this->slash_item('index_page').trim($uri, '/').$suffix;
    }
  }

  // --------------------------------------------------------------------

  /**
   * System URL
   *
   * @access	public
   * @return	string
   */
  function system_url() {
    $x = explode("/", preg_replace("|/*(.+?)/*$|", "\\1", BASEPATH));
    return $this->slash_item('base_url').end($x).'/';
  }

  // --------------------------------------------------------------------

  /**
   * Set a config file item
   *
   * @access	public
   * @param	string	the config item key
   * @param	string	the config item value
   * @return	void
   */
  function set_item($item, $value) {
    $this->config[$item] = $value;
  }

}

// END CI_Config class

/* End of file Config.php */
/* Location: ./system/libraries/Config.php */